package com.lateensoft.pathfinder.toolkit.views.character;
import android.os.Parcelable;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import com.lateensoft.pathfinder.toolkit.R;
import com.lateensoft.pathfinder.toolkit.model.character.items.Armor;
import com.lateensoft.pathfinder.toolkit.model.character.items.Size;
import com.lateensoft.pathfinder.toolkit.util.InputMethodUtils;
import com.lateensoft.pathfinder.toolkit.views.ParcelableEditorActivity;
public class ArmorEditActivity extends ParcelableEditorActivity {
@SuppressWarnings("unused")
private static final String TAG = ArmorEditActivity.class.getSimpleName();
private static final int AC_SPINNER_OFFSET = 20;
private static final int ACP_SPINNER_OFFSET = 20;
private static final int ASF_INCREMENT = 5;
private static final int SPEED_INCREMENT = 5;
private Spinner m_ACSpinner;
private Spinner m_ACPSpinner;
private Spinner m_sizeSpinner;
private Spinner m_speedSpinner;
private Spinner m_maxDexSpinner;
private Spinner m_ASFSpinner;
private EditText m_weightET;
private EditText m_nameET;
private EditText m_specialPropertiesET;
private EditText m_quantityET;
private CheckBox m_itemContainedCheckbox;
private CheckBox m_wornCheckbox;
private OnTouchListener m_spinnerOnTouchListener;
private Armor m_armor;
private boolean m_armorIsNew = false;
@Override
protected void setupContentView() {
setContentView(R.layout.armor_editor);
m_ACSpinner = (Spinner) findViewById(R.id.spArmorClass);
m_ACPSpinner = (Spinner) findViewById(R.id.spArmorCheckPenalty);
m_sizeSpinner = (Spinner) findViewById(R.id.spArmorSize);
m_speedSpinner = (Spinner) findViewById(R.id.spArmorSpeed);
m_ASFSpinner = (Spinner) findViewById(R.id.spArmorSpellFailure);
m_weightET = (EditText) findViewById(R.id.etArmorWeight);
m_specialPropertiesET = (EditText) findViewById(
R.id.etArmorSpecialProperties);
m_nameET = (EditText) findViewById(R.id.armorName);
m_maxDexSpinner = (Spinner) findViewById(R.id.spArmorMaxDex);
m_wornCheckbox = (CheckBox) findViewById(R.id.checkboxIsWorn);
m_quantityET = (EditText) findViewById(R.id.etItemQuantity);
m_itemContainedCheckbox = (CheckBox) findViewById(R.id.checkboxItemContained);
m_spinnerOnTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
InputMethodUtils.hideSoftKeyboard(ArmorEditActivity.this);
return false;
}
};
setupSpinner(m_ACSpinner, R.array.ac_spinner_options, AC_SPINNER_OFFSET, m_spinnerOnTouchListener);
setupSpinner(m_ACPSpinner, R.array.selectable_negative_values_strings, 0, m_spinnerOnTouchListener);
setupSpinner(m_sizeSpinner, Size.getValuesSortedNames(getResources()), 0, m_spinnerOnTouchListener);
setupSpinner(m_speedSpinner, R.array.speed_spinner_options, 0, m_spinnerOnTouchListener);
setupSpinner(m_maxDexSpinner, R.array.selectable_whole_values_strings, 0, m_spinnerOnTouchListener);
setupSpinner(m_ASFSpinner, R.array.armor_spell_fail_options, 0, m_spinnerOnTouchListener);
if(m_armorIsNew) {
setTitle(R.string.new_armor_title);
} else {
setTitle(R.string.edit_armor_title);
m_nameET.setText(m_armor.getName());
}
m_ACSpinner.setSelection(m_armor.getACBonus() + AC_SPINNER_OFFSET);
m_ACPSpinner.setSelection(m_armor.getArmorCheckPenalty() + ACP_SPINNER_OFFSET);
m_sizeSpinner.setSelection(m_armor.getSize().getValuesIndex());
m_maxDexSpinner.setSelection(m_armor.getMaxDex());
m_speedSpinner.setSelection(m_armor.getSpeed()/5);
m_ASFSpinner.setSelection(m_armor.getSpellFail() / ASF_INCREMENT);
m_weightET.setText(Double.toString(m_armor.getWeight()));
m_quantityET.setText(Integer.toString(m_armor.getQuantity()));
m_specialPropertiesET.setText(m_armor.getSpecialProperties());
m_wornCheckbox.setChecked(m_armor.isWorn());
m_itemContainedCheckbox.setChecked(m_armor.isContained());
}
@Override
protected void updateEditedParcelableValues() throws InvalidValueException {
String name = m_nameET.getText().toString();
if(name == null || name.isEmpty()) {
throw new InvalidValueException(getString(R.string.editor_name_required_alert));
}
String specialProperties = m_specialPropertiesET.getText().toString();
if (specialProperties == null) {
specialProperties = "";
}
int speed = m_speedSpinner.getSelectedItemPosition() * SPEED_INCREMENT;
int spellFail = m_ASFSpinner.getSelectedItemPosition() * ASF_INCREMENT;
int weight;
try {
weight = Integer.parseInt(m_weightET.getText().toString());
} catch (NumberFormatException e) {
weight = 1;
}
int quantity;
try {
quantity = Integer.parseInt(m_quantityET.getText().toString());
} catch (NumberFormatException e) {
quantity = 1;
}
int sizeIndex = m_sizeSpinner.getSelectedItemPosition();
int ac = m_ACSpinner.getSelectedItemPosition() - AC_SPINNER_OFFSET;
int acp = m_ACPSpinner.getSelectedItemPosition() - ACP_SPINNER_OFFSET;
int maxDex = m_maxDexSpinner.getSelectedItemPosition();
m_armor.setName(name);
m_armor.setSpeed(speed);
m_armor.setSpecialProperties(specialProperties);
m_armor.setSpellFail(spellFail);
m_armor.setWeight(weight);
m_armor.setQuantity(quantity);
m_armor.setSize(Size.forValuesIndex(sizeIndex));
m_armor.setACBonus(ac);
m_armor.setArmorCheckPenalty(acp);
m_armor.setMaxDex(maxDex);
m_armor.setWorn(m_wornCheckbox.isChecked());
m_armor.setContained(m_itemContainedCheckbox.isChecked());
}
@Override
protected Parcelable getEditedParcelable() {
return m_armor;
}
@Override
protected void setParcelableToEdit(Parcelable p) {
if(p == null) {
m_armorIsNew = true;
m_armor = new Armor();
} else {
m_armor = (Armor) p;
}
}
@Override
protected boolean isParcelableDeletable() {
return !m_armorIsNew;
}
}